package com.joysuch.wwyt.core.service;

import com.joysuch.wwyt.core.common.ajax.ResultBean;
import com.joysuch.wwyt.core.entity.*;
import com.joysuch.wwyt.core.entity.redis.DataSecurityRedisBO;
import com.joysuch.wwyt.util.PageInfo;

import java.util.List;
import java.util.Set;

/**
 * @author : pp
 * @date : Created in 2021/4/13 11:15
 */
public interface BaseRoleDataAuthService {

    void saveDepartAuth(BaseRoleDataDepartAuth entity);

    void deleteDepartAuth(List<Long> ids);

    PageInfo<BaseRoleDataDepartAuthVo> findAllDepartAuth(Long roleId, Integer pageNum, Integer pageSize);

    void saveEmpAuth(List<BaseRoleDataEmpAuth> entity);

    void deleteEmpAuth(List<Long> ids);

    ResultBean findAllEmpAuth(Long roleId, Integer pageNum, Integer pageSize);

    Long[] getUserIds(Long roleId);

    Set<Long> getSummaryUserIds(Long role, Long departId);

    Set<Long> getEmpAuthUserIds(Long role, Long id);

    /**
     * 获取当前用户角色拥有的部门权限
     *
     * @return
     */
    Set<Long> findAuthDepartIdsByCurUser();

    /**
     * 保存角色部门权限
     *
     * @param roleId
     * @return
     */
    DataSecurityRedisBO saveRoleDepartCache(Long roleId, DataSecurityRedisBO dataSecurity, String redisKey);

    /**
     * 拦截器获取当前用户角色拥有的部门权限
     *
     * @return
     */
    List<Long> findDepartIdsByCurUser();

    /**
     * 获取当前用户拥有的部门权限
     *
     * @return
     */
    List<Long> findDepartIdsByUserId(Long userId, Long tenantId, String orgCode);

    /**
     * 初始化角色部门权限
     */
    void initAllRoleDepartCache();

    /**
     * 初始化当前租户角色部门权限
     */
    void initTenantRoleDepartCache();

    ResultBean findJobForReport();
}
